
angular.module('smartOlwApp').controller('InscripcionCtrl', function($scope,ngDialog,smartOlwServices){
      
	//Si lo quiere manejar asi... entonces no seria necesario el #messageBox...
	$scope.titulo_mensajes 		= "Información!";
	$scope.descripcion_mensajes = "En esta vista puede administrar el maestro de departamentos";
    
	var divMessages  			= document.querySelector('#messageBox');
	divMessages.className 		= "alert alert-info alert-dismissable";
	$scope.lista 				= {Inscripcion: []};
	$scope.paises 				= [];
	$scope.departamentos		= [];
	$scope.ciudades				= [];
	
	$scope.Inscripcion 			= {
		scpais : null
	};
	$scope.Inscripcion 			= [];

	$scope.showModal = function() {
		var dialog 	 = ngDialog.open({
			template: '<div>'+
				      '   <p>En esta vista, puede crear nuevos departamentos, teniendo en cuenta los siguientes aspectos:</p>' +
					  '   <p>' + 
					  '     <ul style="list-style-type:circle;margin-left:10px;">'  +
					  '        <li>Los campos con signo *, son obligatorios, se deben diligenciar.</li>' +
					  '     </ul>' +
					  '   </p>' + 
					  '</div>'+
				      '<div class="ngdialog-buttons">'+
				      '<button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="closeThisDialog(1)">Cerrar</button>' +
				      '</div>',
		    className: 'ngdialog-theme-default',
			plain: true
		});
		dialog.closePromise.then(function (data) {
			console.log('ngDialog closed' + (data.value === 1 ? ' using the button' : '') + ' and notified by promise: ' + data.id);
		});
	};
	
	$scope.filterValue = function($event){
        if(isNaN(String.fromCharCode($event.keyCode))){
            $event.preventDefault();
        }
	};
	
	$scope.listarDepartamentos 		= function() {
		var backuppais				= $scope.Inscripcion.scpais;
		$scope.consultar({scpais : backuppais});
	}
	
	$scope.consultar 				 = function(Inscripcion){
		var argumentos 				 = arguments;
		try{
			$scope.inscripciones     = [];
		    $scope.selInscripciones  = [];
		    $scope.totalServerItems  = 0;
		    
		    $scope.filterOptions     = {
	           filterText        : "",
	           useExternalFilter : true
	        }; 
			$scope.pagingOptions     = {
	           pageSizes         : [5, 10, 15, 20, 25, 30],
	           pageSize          : 5,
	           currentPage       : 1
	        };
			
			$scope.gridOptions       = {
	           data              : 'inscripciones',
	           init				 : function(grid,$scope) {
	               setTimeout(function() {
	                   $scope.gridOptions.$gridServices.DomUtilityService.RebuildGrid(
	                       $scope.gridOptions.$gridScope,
	                       $scope.gridOptions.ngGrid
	                   );
	               },1000);
	           },
	   		   enablePaging       : true,
	   		   enableColumnResize : true,
	   		   showFooter         : true,
	   		   selectedItems      : $scope.selInscripciones,
	           totalServerItems   : 'totalServerItems',
	           pagingOptions      : $scope.pagingOptions,
	           filterOptions      : $scope.filterOptions,
	           enablePinning      : true,
	   		   multiSelect        : false,
	           columnDefs         : [
	   			   { field: "id"          , displayName:'Codigo'         , width: "10%" },
	               { field: "nombre"      , displayName:'Nombre'         , width: "30%" },
	               { field: "apellido"    , displayName:'Apellido'       , width: "30%" },
				   { field: "documento"   , displayName:'Documento'      , width: "20%" }, 	  
	   			   { field: "correo"      , displayName:'Correo'         , width: "30%" },
	   			   { field: "telefono"    , displayName:'Telefono'       , width: "20%" }
	   		   ]
	        };
			
			$scope.$watch('pagingOptions', function (newVal, oldVal) {
	           if (newVal !== oldVal && newVal.currentPage !== oldVal.currentPage) {
	             $scope.getPagedDataAsync(
	   				$scope.pagingOptions.pageSize, 
	   				$scope.pagingOptions.currentPage, 
	   				$scope.filterOptions.filterText);
	           }
	        }, true);
			
			$scope.$watch('filterOptions', function (newVal, oldVal) {
	           if (newVal !== oldVal) {
	             $scope.getPagedDataAsync(
	   				$scope.pagingOptions.pageSize, 
	   				$scope.pagingOptions.currentPage, 
	   				$scope.filterOptions.filterText);
	           }//fin de la condicion...
	        }, true);
			
			$scope.getPagedDataAsync      = function(pageSize, page, searchText) {
	           setTimeout(function () {
	               var data;
	               var inicio			 = (page != null)?page:0;
	               var limite			 = (pageSize != null)?pageSize:1;
	               var pagina 			 = {inicio : inicio, limite: limite};
	               $scope.master         = angular.copy(pagina);
	               if (searchText) {
	                  var ft             = searchText.toLowerCase();
	                  HTTP.requestServer(pathScripts+scriptFileList, $scope.master).success(
	   				  function(largeLoad) {		
	                       data          = largeLoad.resultado.filter(function(item) {
	                           return JSON.stringify(item).toLowerCase().indexOf(ft) != -1;
	                       });
	                       $scope.setPagingData(data,page,pageSize);
	                   });            
	               } else {
	                  HTTP.requestServer(pathScripts+scriptFileList, $scope.master).success(
	   				  function (largeLoad) {
	                       $scope.setPagingData(largeLoad,page,pageSize);
	                   });
	               }
	           }, 100);
	        };
			
	        /*
			var exito 						= function(respuesta){
				try{
					var mensaje				= (argumentos.length > 1)?argumentos[1]:"Se realizó la consulta con exito";
					var objeto				= respuesta.data;
					$scope.Inscripcion 		= angular.fromJson(objeto);
					$scope.titulo_mensajes 	= "Sucesos!";
					$scope.descripcion_mensajes  = ($scope.Inscripcion.length > 0)?mensaje:"No hubo resultados";
					var tipo				= ($scope.Inscripcion.length > 0)?"success":"success";
					divMessages.className 	= "alert alert-"+tipo+" alert-dismissable";
				}catch(e){
					alert(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de paises";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				alert(angular.toJson(respuesta));
			}
			
			var backuppais				= Inscripcion.scpais;
			var inpais 					= $scope.buscarPais(Inscripcion.scpais);
			if(Inscripcion.scpais != null) {
				Inscripcion.scpais 		= $scope.paises[inpais];
			}
		    
			smartOlwServices.sendPost(
				angular.toJson(Inscripcion),
				hostSmart+context+endPointInscripcion+methodGetInscripcion,exito,error
			);
			Inscripcion.scpais 			= backuppais;
			*/
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de departamentos";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}

	$scope.grabar = function(departamento){
		var exito = function(respuesta){
			var objeto			= respuesta.data;
			$scope.descripcion_mensajes  = objeto.mensaje;
			var tipo			= (objeto.codigo == "200")?"success":"danger";
			divMessages.className = "alert alert-"+tipo+" alert-dismissable";
			var backuppais				= departamento.scpais;
			if(tipo == "success") {
				$scope.limpiar(departamento);
				$scope.consultar({scpais : backuppais}, objeto.mensaje);
			}
		}

		var error = function(respuesta){
			alert(angular.toJson(respuesta));
		}
		
	    if(departamento.scpais == null) {
	    	$('#scpais').addClass("error");
	    }//End of condition...
	    else if(departamento.codepartamento == null) {
	    	$('#codepartamento').addClass("error");
	    }//End of condition...
	    else if(departamento.dsdepartamento == null) {
	    	$('#dsdepartamento').addClass("error");
	    }//End of condition...
	    else {
	    	var dsm_fhingreso				= new Date();
			var ism_fhingresom				= (dsm_fhingreso.getMonth()+1);
				ism_fhingresom 				= (ism_fhingresom <= 9)?"0"+ism_fhingresom:ism_fhingresom;
			var ism_fhingresod				= dsm_fhingreso.getDate();
				ism_fhingresod 				= (ism_fhingresod <= 9)?"0"+ism_fhingresod:ism_fhingresod;
			var ssm_fhingreso				= dsm_fhingreso.getFullYear()+"-"+ism_fhingresom+"-"+ism_fhingresod;

			var backuppais					= departamento.scpais;
			var inpais 						= $scope.buscarPais(departamento.scpais);
			departamento.cousuario 			= 1;
		    departamento.scpais 			= $scope.paises[inpais];
		    departamento.fhingreso			= ssm_fhingreso;
		    departamento.fhmodificacion 	= ssm_fhingreso;
		    
		    smartOlwServices.sendPut(
	    		angular.toJson(departamento),
	    		hostSmart+context+endPointDepartamento+methodSetDepartamento,exito,error
	    	);
			departamento.scpais 		= backuppais;
	    }
		
	}

	$scope.eliminar = function(departamento){
		try{
			var exito = function(respuesta){
				var objeto			= respuesta.data;
				$scope.descripcion_mensajes  = objeto.mensaje;
				var tipo			= (objeto.codigo == "200")?"success":"danger";
				divMessages.className = "alert alert-"+tipo+" alert-dismissable";
				
				var backuppais				= departamento.scpais;
				
				if(tipo == "success") {
					$scope.limpiar(departamento);
					$scope.consultar({scpais : backuppais}, objeto.mensaje);
				}
				//alert(angular.toJson(respuesta.data));
			}

			var error = function(respuesta){
				alert(angular.toJson(respuesta));
			}
			
			var backuppais				= departamento.scpais;
			var inpais 					= $scope.buscarPais(departamento.scpais);
			//departamento.cousuario 		= 1;
		    departamento.scpais 		= $scope.paises[inpais];
		    smartOlwServices.sendPut(angular.toJson(departamento),hostSmart+context+endPointDepartamento+methodRemoveDepartamento,exito,error);
			departamento.scpais 		= backuppais;
		}catch(e){
			alert(e.message);
		}
	}
	
	$scope.seleccionar = function(editdepartamento){
		$scope.departamento 		= angular.copy(editdepartamento);
		$scope.departamento.scpais 	= $scope.departamento.scpais.copais;
	}
	
	$scope.limpiar = function(departamento){
		$scope.departamentos 		= [];
		departamento.scdepartamento = null;
		departamento.scpais 		= null;
		departamento.cousuario 		= 0;
		departamento.dsdepartamento	= "";
		departamento.codepartamento	= "";
		departamento.fhretiro		= "";
		departamento.fhmodificacion = "";
		departamento.fhingreso		= "";
	}
	
	/*
	 * Vamos a crear un metodo que nos cargue la información del pais... 
	 * Para eso requerimos los servicios de pais...
	 * */
	$scope.cargarPaises = function() {
		try{
			var exito = function(respuesta){
				try{
					var paises = angular.fromJson(respuesta.data);
					$scope.paises.push({dspais : 'Seleccionar' , copais : null});
					$.each(paises, function( index , pais ) {
						$scope.paises.push(pais);
				    });
				}catch(e){
					alert(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes = "Error!";
				$scope.descripcion_mensajes  = "Se produjo un error al momento de consultar la información de paises";
				divMessages.className = "alert alert-danger alert-dismissable";
				alert(angular.toJson(respuesta));
			}
			smartOlwServices.sendGet(hostSmart+context+endPointPais+methodGetAllPais,exito,error);
		}catch(e){
			$scope.titulo_mensajes = "Error!";
			$scope.descripcion_mensajes  = "Se produjo un error al momento de consultar la información de paises";
			divMessages.className = "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.cargarDepartamentos = function(pais) {
		var departamento = {scpais : {scpais : pais}};
		try{
			var exito = function(respuesta){
				try{
					$scope.departamentos 	= [];
					var departamentos 		= angular.fromJson(respuesta.data);
					$scope.departamentos.push({dsdepartamento : 'Seleccionar' , scdepartamento : null});
					$.each(departamentos, function( index , pais ) {
						$scope.departamentos.push(pais);
				    });
				}catch(e){
					alert(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de departamentos";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				alert(angular.toJson(respuesta));
			}
			smartOlwServices.sendPost(
				angular.toJson(departamento),
				hostSmart+context+endPointDepartamento+methodGetDepartamento,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de departamentos";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	//ciudades
	$scope.cargarCiudades = function() {
		var indepart	  = $scope.buscarDepartamento($scope.Inscripcion.scDepartamento);
		var cdepart		  = $scope.departamentos[indepart];
		var ciudadDTO  	  = {departamentodto : cdepart};
		try{
			var exito 	  = function(respuesta){
				try{
					$scope.ciudades 	= [];
					var ciudades 		= angular.fromJson(respuesta.data);
					$scope.ciudades.push({dsciudad : 'Seleccionar' , scciudad : null});
					$.each(ciudades, function( index , ciudad ) {
						$scope.ciudades.push(ciudad);
				    });
				}catch(e){
					alert(e.message);
				}
			}

			var error = function(respuesta){
				$scope.titulo_mensajes 			= "Error!";
				$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
				divMessages.className 			= "alert alert-danger alert-dismissable";
				alert(angular.toJson(respuesta));
			}
			smartOlwServices.sendPost(
				angular.toJson(ciudadDTO),
				hostSmart+context+endPointCiudad+methodGetCiudad,
				exito,
				error);
		}catch(e){
			$scope.titulo_mensajes 			= "Error!";
			$scope.descripcion_mensajes  	= "Se produjo un error al momento de consultar la información de ciudades";
			divMessages.className 			= "alert alert-danger alert-dismissable";
		}
	}
	
	$scope.buscarPais = function(codigo) {
		var posicion = -1;
		for(var index= 0; index < $scope.paises.length; index++) {
			if(codigo == $scope.paises[index].copais) {
				posicion = index;
				break;
			}
		}
		return posicion;
	}
	
	$scope.buscarDepartamento = function(codigo) {
		var posicion = -1;
		for(var index= 0; index < $scope.departamentos.length; index++) {
			if(codigo == $scope.departamentos[index].scdepartamento) {
				posicion = index;
				break;
			}
		}
		return posicion;
	}
	
	$scope.buscarCiudad = function(codigo) {
		var posicion = -1;
		for(var index= 0; index < $scope.ciudades.length; index++) {
			if(codigo == $scope.ciudades[index].scciudad) {
				posicion = index;
				break;
			}
		}
		return posicion;
	}
	
	//$scope.cargarPaises();
	$scope.cargarDepartamentos("");
	
});